import request from '@/utils/request'

export const noFlyZoneService = {
  // 获取禁飞区列表
  getNoFlyZones(params) {
    return request({
      url: '/no-fly-zones',
      method: 'get',
      params
    })
  },
  
  // 获取禁飞区详情
  getNoFlyZoneDetail(id) {
    return request({
      url: `/no-fly-zones/${id}`,
      method: 'get'
    })
  },
  
  // 创建禁飞区
  createNoFlyZone(data) {
    return request({
      url: '/no-fly-zones',
      method: 'post',
      data
    })
  },
  
  // 更新禁飞区
  updateNoFlyZone(id, data) {
    return request({
      url: `/no-fly-zones/${id}`,
      method: 'put',
      data
    })
  },
  
  // 删除禁飞区
  deleteNoFlyZone(id) {
    return request({
      url: `/no-fly-zones/${id}`,
      method: 'delete'
    })
  },
  
  // 检查位置是否在禁飞区内
  checkLocation(data) {
    return request({
      url: '/no-fly-zones/check-location',
      method: 'post',
      data
    })
  },

  /**
   * 获取 DJI 禁飞区数据
   * @param {Object} options
   * @param {number} options.ltlat 左上角纬度
   * @param {number} options.ltlng 左上角经度
   * @param {number} options.rblat 右下角纬度
   * @param {number} options.rblng 右下角经度
   * @param {string} options.zonesMode 禁飞区模式参数
   * @param {string} options.droneType 无人机类型
   * @param {string} options.zoneLevels 区域等级
   * @param {AbortSignal} [options.signal] 可选的中止信号
   * @returns {Promise<Array>} DJI 禁飞区列表
   */
  async fetchDjiNoFlyZones({
    ltlat,
    ltlng,
    rblat,
    rblng,
    zonesMode = '',
    droneType = '',
    zoneLevels = '',
    signal
  } = {}) {
    const params = new URLSearchParams({
      ltlat,
      ltlng,
      rblat,
      rblng,
      zones_mode: zonesMode,
      drone: droneType,
      level: zoneLevels
    })

    const response = await fetch(`https://flysafe-api.dji.com/api/qep/geo/feedback/areas/in_rectangle?${params.toString()}`, {
      headers: { 'Accept-Language': 'zh-CN,zh;q=0.9' },
      signal
    })

    if (!response.ok) {
      throw new Error(`DJI API error: ${response.status}`)
    }

    const data = await response.json()
    return data?.data?.areas || []
  },

  /**
   * 通过天地图接口搜索地点
   * @param {Object} options
   * @param {Object} options.params 查询参数
   * @param {string} options.token API 密钥
   * @returns {Promise<Object>} 搜索结果
   */
  async searchLocations({ params, token }) {
    const url = `https://api.tianditu.gov.cn/v2/search?postStr=${JSON.stringify(
      params
    )}&type=query&tk=${token}`

    const response = await fetch(url)
    if (!response.ok) {
      throw new Error('Tianditu API error')
    }

    return response.json()
  }
}
